package com.zzyl.common.pdf;

import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.text.PDFTextStripper;
import org.apache.pdfbox.io.IOUtils;

import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;

public class PdfUtils {


    /****
     * PDF内容读取
     * 1、传入PDF的文件输入流
     * 2、加载PDF到文档对象中  PDDocument
     * 3、读取文档对象中的内容
     */
    public static String pdfToString(InputStream is){
        //1、传入PDF的文件输入流
        PDDocument doc = null;
        try{
            // 将输入流转换为字节数组，避免重复读取问题
            byte[] byteArray = IOUtils.toByteArray(is);
            
            //2、加载PDF到文档对象中  PDDocument
            // 使用字节数组加载，避免流处理中的EOF异常
            doc = PDDocument.load(byteArray);
            if(doc==null){
                return null;
            }
            //3、读取文档对象中的内容
            PDFTextStripper pdfTextStripper = new PDFTextStripper();
            // 设置不严格模式以避免字体相关错误
            pdfTextStripper.setSortByPosition(true);
            String result = pdfTextStripper.getText(doc);
            return result;
        } catch (IOException e) {
            throw new RuntimeException(e);
        }finally {
            try {
                if(doc!=null){
                    doc.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    public static void main(String[] args) throws FileNotFoundException {
        FileInputStream is = new FileInputStream("E:/5.pdf");
        String result = pdfToString(is);
        System.out.println(result);
        int b=11;
    }
}